home *** CD-ROM | disk | FTP | other *** search
/ NOVA - For the NeXT Workstation / NOVA - For the NeXT Workstation.iso / Newsletters / GEnieUnixNews / unxnl-12.92 < prev   
Text File  |  1992-12-27  |  30KB  |  802 lines

  1.           _  _  _   _  _   _
  2.          // // //| // // \//     N E W S
  3.         //_// // |// //  /\\     Vol 3, Issue 8 - December 1992
  4.       R o u n d T a b l e (tm)
  5.  
  6.    Items of interest to participants of the GEnie Unix RoundTable
  7.  
  8.       The RoundTable SysOps are:
  9.       Andy Finkenstadt....ANDY         Rick Mobley.........LRARK
  10.       Gary Smith..........GARS         Brian Riley.........DELPHI
  11.       Mike Nolan..........MIKE.NOLAN   All Unix SysOps.....UNIX$
  12.    We strongly encourage you to contact any or all of us if you have -ANY-
  13.  comments or suggestions. This is -YOUR- RoundTable. We are here to make
  14.  your participation as pleasant and beneficial as possible.
  15.  
  16.  ED: editor notes - (GARS) Gary Smith
  17.  ==
  18.  
  19.    In this issue you will meet another Unix RoundTable assistant who has
  20.  had a major impact on our library of late, especially with respect to
  21.  public domain kernels.
  22.  
  23.    Mike McCabe and Lance Mehle greatly boosted our Soft Landing System
  24.  support for Linux. Now Mike is posting the entire disk set for 386BSD.
  25.  This means anyone with a 386, 486 computer and adequate storage, both
  26.  in RAM and Hard Disk capacity, can now acquire a complete Unix-like
  27.  operating system from the GEnie Unix RoundTable, and find online
  28.  support for the system once acquired. Not only that, but there is a
  29.  choice between two VERY robust kernels.
  30.  
  31.    Our sincere thanks go to Mike for helping enhance our position as
  32.  'the Unix resource center' among online public information services.
  33.  ----------
  34.  
  35.  In the Spirit of the Season  GARS (Gary Smith)
  36.  ===========================
  37.  
  38.  12days.c (an obfuscated version)
  39.  ------------------- CUT HERE ------------------
  40.  
  41.  #include <stdio.h>
  42.  main(t,_,a )
  43.  char
  44.  *
  45.  a;
  46.  {
  47.  return!
  48.  0<t?
  49.  t<3?
  50.  main(-79,-13,a+
  51.  main(-87,1-_,
  52.  main(-86, 0, a+1 )
  53.  +a)):
  54.  1,
  55.  t<_?
  56.  main( t+1, _, a )
  57.  :3,
  58.  main ( -94, -27+t, a )
  59.  &&t == 2 ?_
  60.  <13 ?
  61.  main ( 2, _+1, "%s %d %d\n" )
  62.  :9:16:
  63.  t<0?
  64.  t<-72?
  65.  main( _, t,
  66.  "@n'+,#'/*{}w+/w#cdnr/+,{}r/*de}+,/*{*+,/w{%+,/w#q#n+,/#{l+,/n{n+,/+#n+,/# \
  67.  ;#q#n+,/+k#;*+,/'r :'d*'3,}{w+K w'K:'+}e#';dq#'l \
  68.  q#'+d'K#!/+k#;q#'r}eKK#}w'r}eKK{nl]'/#;#q#n'){)#}w'){){nl]'/+#n';d}rw' i;# \
  69.  ){nl]!/n{n#'; r{#w'r nc{nl]'/#{l,+'K {rw' iK{;[{nl]'/w#q#n'wk nw' \
  70.  iwk{KK{nl]!/w{%'l##w#' i; :{nl]'/*{q#'ld;r'}{nlwb!/*de}'c \
  71.  ;;{nl'-{}rw]'/+,}##'*}#nc,',#nw]'/+kd'+e}+;#'rdq#w! nr'/ ') }+}{rl#'{n' ')# \
  72.  }'+}##(!!/")
  73.  :
  74.  t<-50?
  75.  _==*a ?
  76.  putchar(31[a]):
  77.  
  78.  main(-65,_,a+1)
  79.  :
  80.  main((*a == '/') + t, _, a + 1 )
  81.  :
  82.  0<t?
  83.  main ( 2, 2 , "%s")
  84.  :*a=='/'||
  85.  main(0,
  86.  main(-61,*a, "!ek;dc i@bK'(q)-[w]*%n+r3#l,{}:\nuwloca-O;m .vpbks,fxntdCeghiry")
  87.  ,a+1);}
  88.  --
  89.  mitchell@mdd.comm.mot.com (Bill Mitchell)
  90.  
  91.  From: profesor@bigwpi.WPI.EDU (Matthew E Cross)
  92.  Newsgroups: alt.sources
  93.  Subject: 12 days of christmas program revealed!
  94.  Date: 16 Dec 1992 04:39:45 GMT
  95.  Organization: Worcester Polytechnic Institute
  96.  Lines: 124
  97.  Distribution: world
  98.  Message-ID: <1gmbuhINNjqq@bigboote.WPI.EDU>
  99.  NNTP-Posting-Host: bigwpi.wpi.edu
  100.  
  101.  I did it!  I decoded an obfuscated C program!Ya-Hoo!
  102.  
  103.  (amazing what one will do to avoid schoolwork :)
  104.  
  105.  Anyways, here's the un-obfuscated version of the program '12.c' posted
  106.  recently (I tried to keep the 'feel' of the original program, yet make
  107.  it somewhat easy to read...  I kept the original two strings that make
  108.  up the song - the phrases string and the conversion string).
  109.  
  110.  (Also, there was a bug in the one posted - it printed 'On the ealeventh
  111.  day of Christmas'...  To fix this, delete the space before the first
  112.  backslash in the big long yucky-looking string.  It's fixed in the
  113.  un-obfuscated one below)
  114.  
  115.  ------------8<------ Cut here ------------8<-----------------
  116.  
  117.  #include <stdio.h>
  118.  
  119.  /* word #converts to:
  120.   *   0   'On the '
  121.   *  -1   'first'
  122.   *  -2   'second'
  123.   *  -3   'third'
  124.   *  -4   'fourth'
  125.   *  -5   'fifth'
  126.   *  -6   'sixth'
  127.   *  -7   'seventh'
  128.   *  -8   'eigth'
  129.   *  -9   'ninth'
  130.   *  -10  'tenth'
  131.   *  -11  'eleventh'
  132.   *  -12  'twelfth'
  133.   *  -13  ' day of Christmas, my true love gave to me\n'
  134.   *  -14  'twelve drummers drumming, '
  135.   *  -15  'eleven pipers piping, '
  136.   *  -16  'ten lords a-leaping,\n'
  137.   *  -17  'nine ladies dancing, '
  138.   *  -18  'eight maids a-milking, '
  139.   *  -19  'seven swams a-swimming,\n'
  140.   *  -20  'six geese a-laying, '
  141.   *  -21  'five gold rings;\n'
  142.   *  -22  'four calling birds, '
  143.   *  -23  'three french hens, '
  144.   *  -24  'two turtle doves\nand '
  145.   *  -25  'a partridge in a pear tree.\n\n'
  146.   */
  147.  
  148.  char words[] =
  149.  "@n'+,#'/*{}w+/w#cdnr/+,{}r/*de}+,/*{*+,/w{%+,/w#q#n+,/#{l+,/n{n+,/+#n+,/#\
  150.  ;#q#n+,/+k#;*+,/'r :'d*'3,}{w+K w'K:'+}e#';dq#'l \
  151.  q#'+d'K#!/+k#;q#'r}eKK#}w'r}eKK{nl]'/#;#q#n'){)#}w'){){nl]'/+#n';d}rw' i;# \
  152.  ){nl]!/n{n#'; r{#w'r nc{nl]'/#{l,+'K {rw' iK{;[{nl]'/w#q#n'wk nw' \
  153.  iwk{KK{nl]!/w{%'l##w#' i; :{nl]'/*{q#'ld;r'}{nlwb!/*de}'c \
  154.  ;;{nl'-{}rw]'/+,}##'*}#nc,',#nw]'/+kd'+e}+;#'rdq#w! nr'/ ') }+}{rl#'{n' ')# \
  155.  }'+}##(!!/";
  156.  
  157.  char convert[] =
  158.  "!ek;dc i@bK'(q)-[w]*%n+r3#l,{}:\
  159.  \nuwloca-O;m .vpbks,fxntdCeghiry";
  160.  
  161.  void
  162.  convert_and_print_word (char *pword)
  163.  {
  164.    char *pch;
  165.  
  166.    while (*pword != '/')
  167.    {
  168.      pch = convert;
  169.      while (*pword != *pch)
  170.        pch++;
  171.      putchar (pch[31]);
  172.      pword++;
  173.    }
  174.  }
  175.  
  176.  void
  177.  find_and_print_word (int wordno)
  178.  {
  179.    char *pch = words;
  180.  
  181.    for (;wordno<0; wordno++,pch++)
  182.    {
  183.      while (*pch != '/')
  184.        pch++;
  185.    }
  186.    convert_and_print_word (pch);
  187.  }
  188.  
  189.  int
  190.  do_it (int tmp, int day)
  191.  {
  192.    if (tmp < 3)
  193.    {
  194.      find_and_print_word (0);
  195.      find_and_print_word (1-day);
  196.      find_and_print_word (-13);
  197.    }
  198.  
  199.      /* notice the funky recursiveness - this idea taken from obfuscated
  200.       * version :) - I thought it was cool
  201.       */
  202.    if (tmp < day)
  203.      do_it (tmp+1, day);
  204.  
  205.    find_and_print_word (tmp-27);
  206.  
  207.    if (tmp == 2)
  208.    {
  209.      if (day < 13)
  210.        return do_it (2, day+1);
  211.      else
  212.        return 0;
  213.    }
  214.  }
  215.  
  216.  main()
  217.  {
  218.    return do_it (2, 2);
  219.  }
  220.  --
  221.  +--------------------------------------------------------------------------+
  222.  | What's red and invisible?           |      profesor@wpi.wpi.edu          |
  223.  |       +------------------------------------+
  224.  |     No tomatoes.      |    Make love, not War...    |
  225.  ----------
  226.  
  227.  WHO: More Biographical Sketches of our great assistants who help make your
  228.  ===  GEnie Unix RoundTable the excellent resource center it is.
  229.  
  230.     Mike McCabe - Age 33, Live in Canton, Michigan (a suburb of
  231.  Detroit), work at Great Lakes Steel a division of National Steel for
  232.  5 years.  Presently responsible for Level 1 (PLCs, etc...) and Level
  233.  2 (Vaxes, PCs, etc...) Technical Support as a Staff Systems Engineer
  234.  which is a Supervisory Level Technical Position.  Basically this
  235.  means that I recommend what systems to buy for the plant to
  236.  implement automation projects.  Largest Project includes a Re-Vamp
  237.  of an 80" Hot Strip Mill that cost around $50 Million.  Previous to
  238.  Great Lakes Steel I worked for General Electric as a Field Service
  239.  Engineer in their Industrial Engineering Group.  Unix experience is
  240.  only 1 year but overall experience includes 15 years of programming
  241.  experience.  I speak Fortran, Pascal, C, C++, COBOL, 80x86 assembly,
  242.  Vax Macro, PDP 11 assembly, Basic and too many script languages to
  243.  mention.  I have worked on everything from a TRS-80 Model 1 Level 1
  244.  to MS-DOS, Windows, VMS, MAX-32, OS9 and of course Unix.
  245.  ----------
  246.  
  247.  Lead Sysop Notes (ANDY)  Andrew Finkenstadt
  248.  ================         Chief Sysop
  249.  
  250.  Greetings!
  251.  
  252.  I will keep this short this month, as I'm a bit short on my Holiday
  253.  shopping and appreciate that many of us may be in the same boat.
  254.  
  255.  The GEnie LiveWire Magazine has a coupon for up to a free hour (us$6) just
  256.  for visiting the Unix RoundTable.  Take advantage of GEnie's generosity and
  257.  download that file you always wanted to grab.  We've added over 400 files
  258.  this month, many having source code and many more adding to our repository
  259.  of Linux (free 386-clone Unix-like operating system) software.  We haven't
  260.  neglected "real" unix, either.  And the "FTP Request" service inaugurated
  261.  last month has been successful in increasing the store of "other" files,
  262.  too.
  263.  
  264.  On behalf of the staff of the Unix RoundTable and GEnie Services I'd like
  265.  to wish you and your loved ones the very best in holiday good cheer and
  266.  celebrations.
  267.  
  268.  If you drink, don't drive.  If you drive, let others do the drinking.  Be
  269.  safe, warm, and happy.  And remember those who are less fortunate than
  270.  ourselves in a moment of quiet.
  271.  
  272.  Warmest regards,
  273.  Andy Finkenstadt
  274.     Gary Smith, Mike Nolan, Brian Riley, Rick Mobley
  275.  ----------
  276.  
  277.  NeXT Column
  278.  ===========
  279.                          The Essential Drive
  280.                                 By Eric "E.T." Tremblay
  281.  
  282.     For those of you who have a NeXT computer and still don't have your
  283.  CD-ROM drive, well you waited a little too long because NeXT had a special
  284.  promotion that ended on July 31 that made the purchase of the drive very
  285.  attractive. NeXT was selling it's CD-ROM drive at $695US (a $200US
  286.  reduction from the retail price) and was including a free upgrade to
  287.  NeXTSTEP 3.0 (a $295US value). Yes, you can still purchase a CD-ROM for
  288.  your NeXT, but it's going to cost you about $495 US more than if you had
  289.  bought it during the special promotion. If you're like me, your CD-ROM
  290.  drive is already sitting beside your computer waiting anxiously for
  291.  NeXTSTEP 3.0 to arrive.  As you can see, peripherals on a NeXT computer are
  292.  priced fairly and, are not out of reach for the regular computer user.
  293.  
  294.     The day I received my drive I was a little disappointed to find that the
  295.  CD-ROM drive is not a complete package. What I mean is that the drive
  296.  comes with only an empty CD-caddy and a book explaining how to install the
  297.  drive, nothing else. This means I had to order a SCSI cable and  a SCSI
  298.  terminator in order to hook up the drive to my computer. Even after finding
  299.  all the missing cables I still could not test my new drive because I had no
  300.  CD-ROM disc. I expected a sample CD-ROM disc with some press releases
  301.  and product information or better yet some programs to let me try out my new
  302.  drive. Nothing! I was expecting a lot more from NeXT, to say the least.
  303.  
  304.     The NeXT CD-ROM is in fact a Sony CDU-541 drive packaged in a sleek
  305.  black casing with the familiar NeXT logo. Also found on the front panel is
  306.  a plug for headphones and a headphone level control, plus a red busy
  307.  indicator and finally an eject button. As with all NeXT equipment the drive
  308.  comes with a universal power supply that can automatically adjust to the
  309.  voltages used in  different countries.  The specifications for the data
  310.  transfer rate is a sustained rate of 150KB/second and a burst rate of
  311.  1200KB/second.
  312.  
  313.     When a CD-ROM disc is inserted into the drive an icon appears in the file
  314.  viewer giving you access to the information found on the disc. I was
  315.  pleasantly surprised by the speed at which it accesses or copies files. The
  316.  current release of NeXTSTEP 2.1 gives the drive the ability to read ISO 9660
  317.  discs which is also called the High Sierra format. A little history before we
  318.  go on, the High Sierra format gets its  name from the location of the first
  319.  meeting on it: the High Sierra Hotel at Lake Tahoe. Later this format was
  320.  slightly modified and then approved by the National Information Standards
  321.  Organization (NISO) and the International Standards Organization (ISO), even
  322.  though the two specifications are slightly different. The High Sierra format
  323.  is much more commonly referred to as ISO 9660.
  324.  
  325.     NeXTSTEP 3.0 will be distributed in CD-ROM format only. It is said that
  326.  the current beta release of NeXTSTEP 3.0 contains 345MB of information
  327.  leaving plenty of free space for new developers' examples and demos. The
  328.  true advantage of the CD-ROM drive will be when NeXT releases its NeXTSTEP
  329.  3.0 operating system. The really interesting feature of NeXTstep 3.0
  330.  concerning the CD-ROM drive will be its ability to recognize three new CD-
  331.  ROM formats. These are Rockridge (which is an extension of the ISO 9660
  332.  format.), the Macintosh Hierarchical File System (HFS), and a NeXT
  333.  proprietary format. The fact that NeXT supports all these formats makes the
  334.  NeXT a leader in CD-ROM technology. NeXT and Sun are the only vendors to
  335.  presently support the Rockridge format. Other vendors are expected to follow
  336.  their lead and therefor same time establish the Rockridge format as the
  337.  standard unix CD-ROM format. Let's hope that software developers will take
  338.  advantage of the NeXT's CD-ROM drive and it's multimedia capabilities to
  339.  bring us some truly amazing applications in the near future.
  340.  
  341.     SoftPC MS-DOS emulation is available on the NeXT; unfortunately the
  342.  current version 2.05.5 does not support the CD-ROM drive as it should.
  343.  SoftPC can read on the drive through its File Sharing Architecture, but
  344.  that's where it ends. Having access to a directory on the CD-ROM is not
  345.  enough; what is truly needed is support for the Microsoft CD Extensions
  346.  (MS-CDEX). When this vital need is met, the NeXT will be able to read all
  347.  the CD-ROM front-ends found on most IBM-specific discs. During a telephone
  348.  conversation I had with Insignia Solutions they said that there was no
  349.   short term plans to upgrade SoftPC to support the CD-ROM drive.
  350.  
  351.     Things are really starting to get rolling on the NeXT and several
  352.  companies have announced that they will sell a disc with NeXT public domain
  353.  software on it. One of them is a company called ISOMedia inc. Their disc is
  354.  called The Internet Unplugged which includes all the NeXT public domain
  355.  software and Usenet articles found on the Internet network. All of that for
  356.  an affordable $80US. Also Paget Press, the publishers of the AppWrapper
  357.  magazine, will now be distributing  quarterly a CD-ROM with their magazine
  358.  and some demo programs (abandoning the printed version in favor of CD-ROM
  359.  distribution). I have already ordered the two above products but in the
  360.  meantime I'll have to be content with my other CD-ROM discs filled with
  361.  MS-DOS and MacIntosh treasures.
  362.  
  363.     All in all, a CD-ROM drive is essential to the health and happiness of
  364.  your NeXT computer. I am sure that this device will be very useful in the
  365.  future;certainly it will become very important once NeXTSTEP 3.0 comes out.
  366.  CD-ROM has proven it's value on other platforms. It's the best way to
  367.  distribute large amounts of information at an affordable price. I think that
  368.  a lot of software in the future will be distributed via this media on the
  369.  NeXT. If you only need one reason to buy a CD-ROM drive, here it is:
  370.  NeXTSTEP 3.0.
  371.  ----------
  372.  
  373.  Down and Dirty: Quick Scripts that do something useful
  374.  ==============
  375.  
  376.  It was a pleasant surprise to find this neat script had been originated
  377.  by the SysAdmin of one of my favorite NixPubs, Karl at Sugar.  Gary (GARS)
  378.  
  379.  The script determines how much you _really_ make......
  380.  
  381.  Article 5039 of alt.sources:
  382.  Path: glsdk!wolves!duke!concert!rock!stanford.edu!bcm!cs.utexas.edu!
  383.        zaphod.mps.ohio-state.edu!sdd.hp.com!caen!uunet!psinntp!sugar!karl
  384.  From: karl@NeoSoft.com (Karl Lehenbauer)
  385.  Newsgroups: comp.lang.tcl,alt.sources
  386.  Subject: countpay - see how much money you're making, with realtime update
  387.  Message-ID: <By8CCy.KF8@NeoSoft.com>
  388.  Date: 24 Nov 92 16:55:35 GMT
  389.  Organization: NeoSoft Communications Services -- (713) 684-5900
  390.  
  391.  Here's a little hack that grew out of a conversation Brad Morrison
  392.  (brad@neosoft.com) and I have been having off and on for a few years,
  393.  namely, whether or not people would feel more guilty about screwing off
  394.  at work if you paid them in cash a couple of times a day.
  395.  
  396.  Barring that, you can simulate it with the Tk script, countpay, below.
  397.  It shows elapsed time and how much money you've made since you started it.
  398.  You'll need Extended Tcl time and date functions.  (Tcl, Tk and Extended Tcl
  399.  are available from sprite.berkeley.edu and barkley.berkeley.edu)
  400.  
  401.  #
  402.  # countpay - cute hack that shows how much you're making over time to help
  403.  # you feel guilty and stop screwing off, or whatever.  Requires Extended Tcl.
  404.  #
  405.  # usage: wish -f countpay dollars_per_hour
  406.  # where dollars per hour is a floating point value.
  407.  #
  408.  # It could be made to be a lot more efficient, but this way it's nice & short.
  409.  #
  410.  
  411.  label .time -font "*fixed-medium-r-normal--*-200-*"
  412.  pack append . .time {bottom expand}
  413.  
  414.  proc countpay {widget timeAtStart hourlyRate} {
  415.      after 1000 countpay $widget $timeAtStart $hourlyRate
  416.      set secondsElapsed [expr {[getclock] - $timeAtStart}]
  417.  
  418.      set days [expr {$secondsElapsed / 86400}]
  419.      set hours [expr {($secondsElapsed % 86400) / 3600}]
  420.      set minutes [expr {($secondsElapsed % 3600) / 60}]
  421.      set seconds [expr {$secondsElapsed % 60}]
  422.  
  423.      set pay [expr {($hourlyRate * $secondsElapsed) / 3600.0 + 0.005}]
  424.  
  425.      .time configure -text
  426.      [format "%3d:%02d:%02d:%02d $%.2f" $days $hours $minutes $seconds $pay]
  427.  }
  428.  
  429.  if !$interactiveSession {
  430.      if {[llength $argv] != 1} {
  431.          puts stderr {usage: 'countpay 50.00' to count pay at $50/hour.}
  432.          exit 1
  433.      }
  434.      countpay .time [getclock] $argv
  435.  }
  436.  
  437.  --
  438.  -- Email info@NeoSoft.com for info on getting interactive Internet access.
  439.     "Turn on your hot tub by email now.  Ask me how."
  440.  -----------
  441.  
  442.  There has been some discussion on how to kill user processes
  443.  that have gone awry. This solution is one of the less distructive
  444.  posted to alt.sources.  gary (GARS)
  445.  
  446.  Path: glsdk!wolves!duke!concert!uvaarpa!caen!spool.mu.edu!
  447.                                            sgiblab!rtech!ingres!jonm
  448.  From: jonm@Ingres.COM (Don't Judge a book by your cover)
  449.  Newsgroups: alt.sources
  450.  Subject: Re: kill
  451.  Message-ID: <1992Dec2.121049.4122@pony.Ingres.COM>
  452.  Date: 2 Dec 92 12:10:49 GMT
  453.  References: <5810@jptcs.COM>
  454.  Organization: University of Arizona MIS Department - Mosaic Group
  455.  Lines: 173
  456.  News-Software: VAX/VMS VNEWS 1.41
  457.  
  458.  In article, Steve.Kilbey%bbs@jptcs.com (Steve Kilbey) writes...
  459.  >The problem with the kill-scripts is that I work in a company where each
  460.  > department has a global login, so 10 users may be logged in under the same
  461.  >login. Obviously they have different tty's. Just wanted to bring to your
  462.  >attention that there are situations out there where that kill-script will
  463.  >not work. This is not meant to be putting your code down. I just wanted to
  464.  >state an exception. Thank you for listening.
  465.  >
  466.  
  467.  I thought I might place some stuff in here that may solve your problem.
  468.  Instead of terminating someone based on their userid, their process group
  469.  is found by looking at their terminal.  There are improvements that could be
  470.  made and I would like some input on this.
  471.  
  472.  I would have shar'd it but its so small anyway.
  473.  
  474.  /* Starts Here */
  475.  
  476.  /*
  477.   *      Idle user exterminator.  This program will kick off a user who is
  478.   *      idle for longer than a specified period of seconds.
  479.   *
  480.   *      It mails the user that has just been killed.  A list of users
  481.   *      can be provided that can be excluded from this process.  These
  482.   *      reside in the file identified by EXCLUDE_FILE
  483.   *
  484.   *      Author:         Jon Machtynger
  485.   *      Date:           28-nov-1992
  486.   */
  487.  
  488.  #include <time.h>
  489.  #include <signal.h>
  490.  #include <sys/types.h>
  491.  #include <sys/stat.h>
  492.  #include <stdio.h>
  493.  #include <utmp.h>
  494.  
  495.  #define TRUE 1
  496.  #define FALSE 0
  497.  
  498.  #define TMP_FILE        "/etc/utmp"
  499.  #define EXCLUDE_FILE    "/etc/idle_exclude"
  500.  
  501.  long            num_of_seconds;
  502.  struct utmp     u;
  503.  long            t;
  504.  
  505.  main(argc, argv)
  506.  int      argc;
  507.  char *argv[];
  508.  {
  509.       FILE            *fp;
  510.       struct stat     ttystat;
  511.       char            ttyname[100];
  512.       char            tmp[100];
  513.  
  514.       if (argc < 2)   /* First check argument usage */
  515.       {
  516.               fprintf(stderr, "Usage: %s <num of seconds>\n", argv[0]);
  517.               exit (1);
  518.       }
  519.  
  520.       num_of_seconds=atoi(argv[1]);
  521.       if (num_of_seconds <= 0)
  522.       {
  523.               fprintf(stderr, "Enter a positive integer for the seconds\n");
  524.               exit (1);
  525.       }
  526.  
  527.       if ((fp = fopen(TMP_FILE, "r")) == NULL)        /* Get utmp info */
  528.       {
  529.               fprintf(stderr, "%s: Unable to open user file '%s'\n", TMP_FILE);
  530.               exit(1);
  531.       }
  532.  
  533.       time(&t);               /* Get current time */
  534.       while (!feof(fp))       /* For each user that is logged in */
  535.       {
  536.               fread(&u, sizeof(u), 1, fp);
  537.               if (u.ut_name[0] == '\0')
  538.                      continue;
  539.  
  540.               sprintf(ttyname, "/dev/%s", u.ut_line);     /* Get line name */
  541.               if (stat(ttyname, &ttystat) >= 0) {         /* Stat the line */
  542.                       if ((t - ttystat.st_mtime) > num_of_seconds &&
  543.                                       (exclude_user(u.ut_name) != TRUE))
  544.                       {
  545.                sprintf(tmp, "Problem killing process belonging to user %s",
  546.                                               u.ut_name);
  547.                 if (kill(get_process_group(u.ut_line), SIGKILL) < 0)
  548.                                       perror(tmp);
  549.                               else
  550.                                       mail_user();
  551.                       }
  552.               }
  553.       }
  554.       fclose(fp);
  555.  }
  556.  /*
  557.   *      Currently this uses does a ps to find a pid of something running
  558.   *      on the terminal requested.  This should be improved to use proc.h
  559.   */
  560.  
  561.  int     get_process_group(ttyname)
  562.  char    *ttyname;
  563.  {
  564.       int             pid;
  565.       char    cmd[200];
  566.       FILE    *p;
  567.  
  568.       sprintf(cmd, "ps -t%s | grep -v PID", ttyname); /* Format command */
  569.       if ((p = popen(cmd, "r")) == NULL)
  570.       {
  571.               fprintf(stderr, "Unable to open pipe for cmd '%s'\n", cmd);
  572.               return -1;
  573.       }
  574.       fscanf(p, "%d", &pid);          /* Get any PID on that terminal */
  575.       if (pid <= 0)
  576.               return -1;
  577.  
  578.       return getpgrp(pid);
  579.  }
  580.  
  581.  /* Determines whether to exclude a user from death */
  582.  
  583.  int             exclude_user(uname)
  584.  char    *uname;
  585.  {
  586.  
  587.       FILE    *fp;
  588.       char    excluded_user[1000];
  589.  
  590.       if ((fp = fopen(EXCLUDE_FILE, "r")) == NULL) /* Unreadable or missing */
  591.               return FALSE;
  592.  
  593.       while (!feof(fp))
  594.       {
  595.               fscanf(fp, "%[^\n]\n", excluded_user);
  596.               if (excluded_user[0] != '#')                   /* Comment line */
  597.                       if (!strcmp(uname, excluded_user))
  598.                               return TRUE;
  599.       }
  600.       return  FALSE;
  601.  }
  602.  
  603.  mail_user()
  604.  {
  605.       char    tmp[200];
  606.       char    msg[200];
  607.  
  608.       sprintf(msg, "(%s on %s) %s\n", u.ut_name, u.ut_line, ctime(&t));
  609.       sprintf(tmp, "You had an idle time of longer than %d seconds",
  610.               num_of_seconds);
  611.       strcat(msg, tmp);
  612.       sprintf(tmp, "echo '%s'| mail %s", msg, u.ut_name);
  613.       system(tmp);
  614.  }
  615.  
  616.  
  617.  /*
  618.   *      End here...
  619.   */
  620.  
  621.  ____________________________________________________________________________
  622.  The reasonable man adapts himself to the world;the unreasonable one persists
  623.  in trying to adapt the world to himself.  Therefore all progress depends on
  624.  the unreasonable man.
  625.                  -- George Bernard Shaw
  626.  ________________.
  627.  Jon Machtynger  | Ahhh Brisbane, center of the world.  How I miss a Silvio's
  628.  jonm@ingres.com | Pizza A Jug of Powers and a good puke in the Mall.
  629.  ________________|
  630.  
  631.  Upload contest winners for November  (ANDY)
  632.  ===================================
  633.  Congratulations to Lance Mehle for the month of November as he
  634.  qualified as winner of both our free days for his new uploads.
  635.   Good work! Andy
  636.  
  637.  usr/local: Items (scripts and news) snarfed from various sources
  638.  =========
  639.  
  640.   listdirs() Directory Lister Mike McCabe (MIKE.MCCABE)
  641.  #
  642.  #       File to list recursively all directorys including links.
  643.  #
  644.  ldirs ()
  645.  {
  646.  #
  647.  #       Declare a new level for this instance of the call
  648.  #
  649.          level=`expr $2 + 1`
  650.  #
  651.  #       Change to the directory found in the last call
  652.  #
  653.          cd $1
  654.  #
  655.  #       For all files in this directory check for directories
  656.  #
  657.          for name in *
  658.          do
  659.  #
  660.  #               If this file is a directory then
  661.  #
  662.                  if [ -d $name ]
  663.                  then
  664.  #
  665.  #                       Calculate the appropriate screen level for tabbing
  666.  #
  667.                          i=`expr $level - 2`
  668.  #
  669.  #                       If screen needs to be tabbed (i.e. level >= 3) then
  670.  #
  671.                          if [ $i -ge 0 ]
  672.                          then
  673.  #
  674.  #                               While level is above tab range tab
  675.  #
  676.                                  while [ $i -ge 1 ]
  677.                                  do
  678.                                          echo -ne '\t'
  679.                                          i=`expr $i - 1`
  680.                                  done
  681.  #
  682.  #                               Finish by drawing a line to represent subdir
  683.  #
  684.                                  echo -ne '+-------'
  685.                          fi
  686.  #
  687.  #                       Echo the name of the directory to stdout
  688.  #
  689.                          echo $name
  690.  #
  691.  #                       Recurse into the routine again to check the
  692.  #                       directory for directories.
  693.  #
  694.                          ldirs $name $level
  695.                  fi
  696.          done
  697.  #
  698.  #       Make sure we switch back to the directory we started from
  699.  #
  700.          cd ..
  701.  #
  702.  #       Set the level back...
  703.  #
  704.          level=`expr $level - 1`
  705.  #
  706.  #       and return
  707.  #
  708.          return
  709.  }
  710.  
  711.  #
  712.  # Initial Level is Zero
  713.  #
  714.  level=0
  715.  #
  716.  # Start the ball rolling with the first call giving current dir and level
  717.  #
  718.  ldirs $PWD $level
  719.  
  720.  Tutorials
  721.  =========
  722.  
  723.  CD-ROM multi-session versus non-multi-session
  724.  ---------------------------------------------
  725.  
  726.  In article <Bz0LJw.HB0@news.cso.uiuc.edu> peltz@cerl.uiuc.edu (Steve Peltz)
  727.  writes:
  728.  - What is it that a non-multi-session drive can't do that makes it unable
  729.  - to read past the first session of a multi-session disk? Why can't it be
  730.  - read just by using a different driver in the computer?
  731.  -
  732.  - I have read the description of the different recording formats on a disk,
  733.  - although I'm not fluent. But I haven't seen a description of how a multi-
  734.  - session disk is different.
  735.  - --
  736.  - Steve Peltz
  737.  - Internet: peltz@cerl.uiuc.edu PLATO/NovaNET: peltz/s/cerl
  738.  
  739.    A cd has a table of contents in a pre determined location.  Multi session
  740.  cd's have multiple TOC's. The non-multi-session drive can't locate the other
  741.  TOC's because it assumes that the cd will have 1 TOC and that the TOC can be
  742.  found in a pre-determined location.
  743.  
  744.    The following better description is from the CDRom FAQ
  745.  
  746.  ==========================================================================
  747.  36. What is a multisession CD drive?
  748.  
  749.    A CD has an "index" area which contains track details; this is what is
  750.    read when you first stick an audio CD into a player.  Photo-CDs have a
  751.    separate index area each time they are written (because it is impossible
  752.    to "update" the index area). A multisession drive is one that knows to
  753.    look for multiple index areas. The full details are contained in the
  754.    Philips/Sony/Kodak "Orange Book" standard for writable CDs.
  755.  
  756.    The issues of CD-WO and how multsessions are recorded are addressed in the
  757.    European Computer Manufacture Association (ECMA)  new standard ECMA 168,
  758.    which became a standard in June of this year. The title of the standard is
  759.    "Volume and File Structure of Read-Only and Write-Once Compact Disc Media
  760.    for Information Interchange".  This standard expands upon the ISO-9660
  761.    CD-ROM standard.
  762.  
  763.  ==========================================================================
  764.  
  765.    this is a bit off the topic of this group, but it is usefull information
  766.    so I thought i'd post it.
  767.  
  768.    Zeke
  769.  
  770.  --
  771.  +=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+
  772.  =+   +=   Eschew Obfuscation           Next Mail Welcome  =+   +=
  773.  +=   =+   James "Zeke" Dehnert        zeke@znext.cts.com  +=   =+
  774.  =+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=
  775.  
  776.  
  777.  
  778.   ---------------
  779.   REMINDER - This newsletter is being sent to you 'by request'. If you do
  780.  not wish to keep receiving it, e-mail a stop notice to GARS. On the other
  781.  hand, we would very much appreciate it if you would pass the word that we
  782.  do distribute this item near the tenth (10th) of the month of issue to any-
  783.  one on GEnie who requests it.
  784.    P L E A S E  also remember contributions are most welcome. Please e-mail
  785.  items and/or suggestions to GARS.
  786.  
  787.   (EOF)
  788.  
  789.  Trademark and Copyright notices:
  790.  Unix is a Trademark  of UNIX System Laboratories, Inc.; GEnie, LiveWire, and
  791.  RoundTable are Trademarks of General Electric Information Services  Company;
  792.  Xenix and ms-dos are Trademarks of  Microsoft  Corporation; NeXT NeXTstation
  793.  and NeXTstep  are Trademarks  of  NeXT Computer Systems, Inc., Coherent is a
  794.  Trademark of Mark Williams Company, Sun, SPARC, SunOS are Trademarks of  Sun
  795.  Microsystems, Inc., SCO is a Trademark of Santa Cruz Operations.
  796.  
  797.  The contents of this newsletter are copyright(c) 1992 and may be copied whole
  798.  or in part only if original  credit is included. The GEnie UNIX RoundTable is
  799.  not affiliated with AT&T or UNIX System Laboratories, Inc.
  800.  
  801.  
  802.